今天给大家讲讲关于提示词工程,还有大模型多场景实战方面的知识,大家都知道,当下,只要掌握提示词工程技能就能驾驭AI,同时实现大幅提升工作效能和质量,从而拓宽职业发展,接下来我就帮助大家逐步深入并融合大模型提升商业化思维,打通职场、副业的求职、创作、教学、绘图、编程等多场景应用实战。 目前,人工智能正在颠覆许多行业,包括新闻行业、医疗卫生行业和教育行业。你可能很快看到人工智能在你工作或教学中出现,即使现在还没有。但是,尽管人工智能非常有用,但它们需要人类来指导它们做什么。通常情况下,人工智能就像非常聪明的五岁小孩。它们可以做很多事情,但它们需要仔细的指导才能做得好。 能够正确指导人工智能是一项非常强大的技能。那么该如何跟它们沟通呢?本课程讨论的人工智能能够理解英语(和其他语言)。所以我们通常只需描述我们想要完成的任务。
推断(Inferring) 所谓推断是指能够从一段文本中推断出作者的情绪,比如:高兴,快乐,正面,负面等。。。 首先我们需要设置通过API来访问的主要代码: type scase struct { c *hchan // chan的结构体类型指针 elem unsafe.Pointer // //读或者写的缓冲区地址 }
type hchan struct { qcount uint // total data in the queue dataqsiz uint // size of the circular queue buf unsafe.Pointer // points to an array of dataqsiz elements elemsize uint16 closed uint32 elemtype *_type // element type sendx uint // send index recvx uint // receive index recvq waitq // list of recv waiters sendq waitq // list of send waiters
// lock protects all fields in hchan, as well as several
// fields in sudogs blocked on this channel.
//
// Do not change another G's status while holding this lock
// (in particular, do not ready a G), as this can deadlock
// with stack shrinking.
lock mutex
}
商品评论文本 下面我们给提供一段消费者对某电商网站商品的评论,我们希望能够从这段评论中推断出消费者的情绪,由于原始评论是英文的,我将其翻译的中文也罗列出来,这样可以便于大家理解: fatal error: concurrent map writes
goroutine 19 [running]: main.main.func1() G:/code/go/go-interview/demo/8-21/map-concurrency/main.go:12 +0x36 created by main.main G:/code/go/go-interview/demo/8-21/map-concurrency/main.go:11 +0x3d
goroutine 1 [semacquire]: sync.runtime_Semacquire(0xc00008e120?) D:/Program Files/Go/src/runtime/sema.go:62 +0x27 sync.(*WaitGroup).Wait(0x0?) D:/Program Files/Go/src/sync/waitgroup.go:116 +0x4b main.main() G:/code/go/go-interview/demo/8-21/map-concurrency/main.go:16 +0xe5 exit status 2 关于LLM设置的说明 在使用提示时,您将通过API或直接与LLM进行交互。您可以配置一些参数以获得不同提示的结果。
温度 - 简而言之,温度越低,结果就越确定,因为始终选择最有可能的下一个标记。增加温度可能会导致更多的随机性,从而鼓励更多元化或创造性的输出。实际应用中,我们可能希望对基于事实的QA使用较低的温度来鼓励更加客观和简洁的回答。 对于像诗歌生成或其他创意任务,增加温度可能是有益的。
Top_p - 类似地,通过称为nucleus采样的带有温度的采样技术,可以控制模型在生成响应时的确定性。如果您正在寻找准确和事实的答案,请将其保持在低值。如果你正在寻找更多元化的回答,请将其增加到较高的值。
通常的建议是只更改其中一个。
在开始一些基本的示例之前,请记住,您的结果可能取决于您使用的LLM版本。 package main
import ( "fmt" "log" "time" )
var cache = make(map[int]int)
func init() { Ticker(refreshCache, time.Second) } func main() { for i := 0; i < 100000000; i++ { //模拟非并发写入 cache[i] = i } time.Sleep(time.Second) fmt.Println(cache) }
//全量更新缓存 func refreshCache() { log.Println("开始更新缓存") data := GetDataFromDB() if len(data) == 0 { return }
tmp := make(map[int]int, len(data))
for i, d := range data {
tmp[i] = d
}
//全量更新cache
cache = tmp
tmp = nil
}
func GetDataFromDB() []int { return []int{1, 2, 3} }
// 启动一个定时器 func Ticker(f func(), d time.Duration) { go func() { ticker := time.NewTicker(d) for { select { case <-ticker.C: go f() } } }() }
指令 您可以使用命令来指示模型您想要实现的内容,例如“写入”、“分类”、“总结”、“翻译”、“排序”等,从而为各种简单任务设计有效的提示。 请记住,您还需要进行大量实验以了解最佳的方法。尝试不同的指令与不同的关键字、上下文和数据,并观察哪种方法最适合您特定的用例和任务。通常,上下文与您要执行的任务相关性越强,越具体和相关,结果越好。我们将在即将推出的指南中讨论采样和添加更多上下文的重要性。 其他人建议指令放在提示的开头。还建议使用一些清晰的分隔符,如“###”来分隔指令和上下文。 例如: package main
import ( "log" ) import "time"
type Request interface{}
func handle(r Request) { log.Println("发起请求", r) }
const RateLimitPeriod = time.Second const RateLimit = 1 // 任何一秒钟内最多处理1个请求 func handleRequests(requests <-chan Request) { quotas := make(chan struct{}, RateLimit)
//相当于以恒定的速率放入令牌
go func() {
tick := time.NewTicker(RateLimitPeriod / RateLimit)
defer tick.Stop()
for _ = range tick.C {
select {
case quotas <- struct{}{}:
default:
}
}
}()
for r := range requests {
<-quotas
go handle(r)
}
}
func main() { requests := make(chan Request) go handleRequests(requests) for i := 0; i < 100; i++ { requests <- i } } 今天就给大家写到这里,希望我的文章对大家有所帮助!!
有疑问加站长微信联系(非本文作者)